package winOrDie.Net.Client;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import winOrDie.Net.Client.WoD_Peer_Editor.XML_ELEMENTS_WoD_Peer;

/**
 * This public class provides {@link WoD_Peers_List} XML editor
 *
 */
public class WoD_Peers_List_Editor {

	/**
	 * {@link WoD_Peers_List_Editor} XML Elements and attributes
	 *
	 */
	public static class XML_ELEMENTS_WoD_Peers_List_Editor
	{
		public static String Element_WoD_Peers_List = "WoD_Peer_List";
	}
	
	
	/**
	 * This public static method returns {@link Element} from {@link WoD_Peers_List} and {@link Document} passed as parameters
	 * @param woDPeersList 
	 * @param document
	 * @return {@link Element}
	 */
	public static Element get_Element_From_WoD_Peers_List(
			WoD_Peers_List woDPeersList,
			Document document)
	{
		Element element_WoD_Peers_List = document.createElement(XML_ELEMENTS_WoD_Peers_List_Editor.Element_WoD_Peers_List);
		
		for (WoD_Peer woDPeer : woDPeersList.getWoD_Peers()) {
			element_WoD_Peers_List.appendChild(
					woDPeer.get_XML_Element(document)
					);
		}
		return element_WoD_Peers_List;
	}
	
	
	/**
	 * This public static method return {@link WoD_Peers_List} object from {@link Element} passed as parameter
	 * @param element
	 * @return {@link WoD_Peers_List}
	 * @throws Exception
	 */
	public static WoD_Peers_List get_WoD_Peers_List_From_Element(Element element) throws Exception
	{
		
		if (!element.getNodeName().equals(XML_ELEMENTS_WoD_Peers_List_Editor.Element_WoD_Peers_List))
		{
			Exception exception = new Exception("The element is not a WoD_Peers_List element.");
			throw exception;
		}
		
		WoD_Peers_List woDPeersList = new WoD_Peers_List();
		
		
		/**
		 * Search WoD_Peer nodes and insert into WoD_Peers_List
		 */
		NodeList nodeList = element.getElementsByTagName(XML_ELEMENTS_WoD_Peer.Element_Peer);
		
		Node node = null;
		for (int index = 0; index < nodeList.getLength(); index++) {
			node = nodeList.item(index);
			woDPeersList.add_WoD_Peer(
					WoD_Peer_Editor.get_WoD_Peer_From_Element((Element)node)
					);
		}
		
		return woDPeersList;
	}
	
	
}
